﻿unit uProduto;

interface

uses
  Generics.Collections, SysUtils;


type TUnidade = class
  private
    fidunidade: integer;
    fnome: string;

    procedure setIdUnidade(const value: integer);
    procedure setNome(const value: string);

    function getIdUnidade: integer;
    function getNome: string;

  public
    property idUnidade : integer read getIdUnidade write setIdUnidade;
    property nome      : string  read getNome      write setNome;

end;

type
  TSubGrupoProduto = class
  private
    fidSubGrupoProduto: integer;
    fnome: string;

    procedure setIdSubGrupoProduto(const value: integer);
    procedure setNome(const value: string);

    function getIdSubGrupoProduto: integer;
    function getNome: string;

  public
    property idSubGrupoProduto : integer read getIdSubGrupoProduto write setIdSubGrupoProduto;
    property nome              : string  read getNome              write setNome;

  end;

type
  TGrupoProduto = class
  private
    fidGrupoProduto: integer;
    fnome: string;

    procedure setIdGrupoProduto(const value: integer);
    procedure setNome(const value: string);

    function getIdGrupoProduto: integer;
    function getNome: string;

  public

    property idGrupoProduto  : integer          read getIdGrupoProduto  write setIdGrupoProduto;
    property nome            : string           read getNome            write setNome;

  end;

type
  TProduto = class
  private
    fidProduto: integer;
    fdescricao: string;
    fvalorunitario: Currency;
    fdesativado: integer;
    fcodgrupoproduto: TGrupoProduto;
    fimagem: String;
    fcodbarra: String;

    procedure setIdProduto(const value: integer);
    procedure setDescricao(const value: string);
    procedure setValorUntario(const value: Currency);
    procedure setDesativado(const value: integer);
    procedure setCodGrupoProduto(const value: TGrupoProduto);
    procedure setImagem(const value: String);
    procedure setCodBarra(const value: String);

    function getIdProduto: integer;
    function getDescricao: string;
    function getValorUnitario: Currency;
    function getDesativado: integer;
    function getCodGrupoProduto: TGrupoProduto;
    function getImagem: String;
    function getCodBarra: String;

  public
    constructor Create; virtual;
    destructor Destroy; virtual;

    property idProduto            : integer          read getIdProduto            write setIdProduto;
    property descricao            : string           read getDescricao            write setDescricao;
    property valorUnitario        : Currency         read getValorUnitario        write setValorUntario;
    property desativado           : integer          read getDesativado           write setDesativado;
    property codGrupoProduto      : TGrupoProduto    read getCodGrupoProduto      write setCodGrupoProduto;
    property imagem               : String           read getImagem               write setImagem;
    property codbarra             : String           read getCodBarra             write setCodBarra;

  end;

type TLoteValidade = class
  private
    fidLoteValidade: Integer;
    fcodProduto : TProduto;
    flote: String;
    fValidade: TDate;

    procedure setIdLoteValidade(const value : Integer);
    procedure setCodProduto(const value : TProduto);
    procedure setLote(const value : String);
    procedure setValidade(const value : TDate);

    function getIdLoteValidade : Integer;
    function getCodProduto : TProduto;
    function getLote : String;
    function getValidade : TDate;

  public
    constructor Create; virtual;
    destructor Destroy; virtual;

    property  idLoteValidade  : Integer  read getIdLoteValidade    write setIdLoteValidade;
    property  codProduto      : TProduto read getCodProduto        write setCodProduto;
    property  lote            : String   read getLote              write setLote;
    property  Validade        : TDate    read getValidade          write setValidade;

end;


implementation

{ TGrupoProduto }

function TGrupoProduto.getIdGrupoProduto: integer;
begin
  Result := fidGrupoProduto;
end;

function TGrupoProduto.getNome: string;
begin
  Result := fnome;
end;

procedure TGrupoProduto.setIdGrupoProduto(const value: integer);
begin
  fidGrupoProduto := value;
end;

procedure TGrupoProduto.setNome(const value: string);
begin
  fnome := value;
end;

{ TProduto }

constructor TProduto.Create;
begin
  codGrupoProduto    := TGrupoProduto.Create;
end;

destructor TProduto.Destroy;
begin
  if Assigned(codGrupoProduto) then
    FreeAndNil(fcodgrupoproduto);
end;

function TProduto.getCodBarra: String;
begin
  Result := fcodbarra;
end;

function TProduto.getCodGrupoProduto: TGrupoProduto;
begin
  Result := fcodgrupoproduto;
end;

function TProduto.getDesativado: integer;
begin
  Result := fdesativado;
end;

function TProduto.getDescricao: string;
begin
  Result := fdescricao;
end;

function TProduto.getIdProduto: integer;
begin
  Result := fidProduto;
end;

function TProduto.getImagem: String;
begin
  Result := fimagem;
end;

function TProduto.getValorUnitario: Currency;
begin
  Result := fvalorunitario;
end;

procedure TProduto.setCodBarra(const value: String);
begin
  fcodbarra := value;
end;

procedure TProduto.setCodGrupoProduto(const value: TGrupoProduto);
begin
  fcodgrupoproduto := value;
end;

procedure TProduto.setDesativado(const value: integer);
begin
  fdesativado := value;
end;

procedure TProduto.setDescricao(const value: string);
begin
  fdescricao := value;
end;

procedure TProduto.setIdProduto(const value: integer);
begin
  fidProduto := value;
end;

procedure TProduto.setImagem(const value: String);
begin
  fimagem := value;
end;

procedure TProduto.setValorUntario(const value: Currency);
begin
  fvalorunitario := value;
end;

{ TSubGrupoProduto }

function TSubGrupoProduto.getIdSubGrupoProduto: integer;
begin
  Result := fidSubGrupoProduto;
end;

function TSubGrupoProduto.getNome: string;
begin
  Result := fnome;
end;

procedure TSubGrupoProduto.setIdSubGrupoProduto(const value: integer);
begin
  fidSubGrupoProduto := value;
end;

procedure TSubGrupoProduto.setNome(const value: string);
begin
  fnome := value;
end;

{ TLoteValidade }

constructor TLoteValidade.Create;
begin
  codProduto := TProduto.Create;
end;

destructor TLoteValidade.Destroy;
begin
  if Assigned(codProduto) then
    FreeAndNil(fcodProduto);
end;

function TLoteValidade.getCodProduto: TProduto;
begin
  Result := fcodProduto;
end;

function TLoteValidade.getIdLoteValidade: Integer;
begin
  Result := fidLoteValidade;
end;

function TLoteValidade.getLote: String;
begin
  Result := flote;
end;

function TLoteValidade.getValidade: TDate;
begin
  Result := fValidade;
end;

procedure TLoteValidade.setCodProduto(const value: TProduto);
begin
  fcodProduto := value;
end;

procedure TLoteValidade.setIdLoteValidade(const value: Integer);
begin
  fidLoteValidade := value;
end;

procedure TLoteValidade.setLote(const value: String);
begin
  flote := value;
end;

procedure TLoteValidade.setValidade(const value: TDate);
begin
  fValidade := value;
end;

{ TUnidade }

function TUnidade.getIdUnidade: integer;
begin
  Result := fidunidade;
end;

function TUnidade.getNome: string;
begin
  Result := fnome;
end;

procedure TUnidade.setIdUnidade(const value: integer);
begin
  fidunidade := value;
end;

procedure TUnidade.setNome(const value: string);
begin
  fnome := value;
end;

end.
